<?php
namespace App\Helper;

/**
 * 扁平数组转树结构
 *
 * @param array $items 扁平数组，每项包含 'id' 和 'parent_id'
 * @param int|null $parentId 根节点的父id，一般是 null 或 0
 * @return array 树形结构数组
 */
function listToTree(array $items, ?int $parentId = 0): array
{
    $tree = [];
    // 先用 id 做索引，方便查找
    $indexed = [];
    foreach ($items as $item) {
        $item['children'] = [];
        $indexed[$item['id']] = $item;
    }
    foreach ($indexed as $id => &$item) {
        if ($item['parent_id'] === $parentId || $item['parent_id'] === null) {
            // 根节点
            $tree[] = &$item;
        } else {
            // 非根节点，放到父节点的 children 中
            if (isset($indexed[$item['parent_id']])) {
                $indexed[$item['parent_id']]['children'][] = &$item;
            }
        }
    }
    unset($item);
    return $tree;
}

/**
 * mq发送消息格式
 * @param string $type
 * @param array $data
 * @return array
 */
function mqSendMessage(string $type, array $data): array
{
    return [
        'type' => $type,
        'data' => $data,
    ];
}
